package com.qf.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resources;

/**
 * 实现类 ：  重写接口中的交换机及队列应答的方法
 *
 *   <bean id  class  init-method
 *
 *    @Bean(initMethod
 * @author lixu
 */
@Component //实例化
@Slf4j
public class MyRabbitMQConfig implements RabbitTemplate.ConfirmCallback,RabbitTemplate.ReturnCallback {

    //SpringIOC注入
    @Autowired
    private RabbitTemplate rabbitTemplate;//


    //新注解
    @PostConstruct //初始化注解
    public void init(){
        rabbitTemplate.setConfirmCallback(this);
        rabbitTemplate.setReturnCallback(this);
    }

    /**
     * 交换机应答接口的实现类 的重写方法
     * @param correlationData
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        if(ack){
            log.info("交换机接收消息成功!");//黑色
        }else{
            log.error("交换机接收消息失败!:{}",cause);//红色
            //重新发送消息
        }
    }

    /**
     * 队列应答接口实现类 的重写方法   肯定是失败的
     * @param message
     */
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
        log.error("队列接收消息失败!:{}",replyText);//红色
        //重新发送消息
    }


}
